import {config} from "./config";
import reqwest from 'reqwest';
import Promise from 'bluebird';
import md5 from 'MD5';
import {Message} from 'element-ui';

const app = {
  serverUrl: config.serverUrl,
  imgServerUrl: config.imgServerUrl,
  fileUrl: config.fileUrl,
  /**
   * 存储token值（localStorage没有时间限制）
   * @param token
   */
  setToken: function (token) {
    return localStorage.setItem("token", token);
  },
  /**
   * 获取token值
   */
  getToken: function () {
    return localStorage.getItem('token');
  },
  /**
   * 移除token值
   */
  removeToken: function () {
    localStorage.removeItem('token');
  },
  /**
   * 存储值
   * @param key
   * @param value
   */
  setData: function (key, value) {
    if (!value) {
      return;
    }
    if (typeof value == 'object') {
      localStorage.setItem(key, JSON.stringify(value));
    } else {
      localStorage.setItem(key, value);
    }
  },
  /**
   * 获取值
   * @param key
   * @param defaultData 当返回值为空时返回默认值
   * @returns {*}
   */
  getData: (key, defaultData) => {
    let value = localStorage.getItem(key);
    if (value) {
      return value;
    } else {
      return defaultData;
    }
  },
  /**
   * 移除存储值
   * @param key
   */
  removeData: function (key) {
    localStorage.removeItem(key);
  },
  post: function (url, data) {
    //token固定传给服务器的参数
    data.token = app.getToken();
    const result = app.ajax(url, data, 'POST');
    return result;
  },
  /**
   * 处理请求
   * @param url
   * @param data
   * @param method
   * @param contentType
   * @returns {bluebird}
   */
  ajax: function (url, data, method, contentType = 'application/x-www-form-urlencoded;charset=uft8') {
    const reqUrl = config.serverUrl + url;
    app.log(reqUrl);
    return new Promise((resolve, reject) => {
      reqwest({
        url: reqUrl,
        data: data,
        method: method,
        dataType: 'json',
        contentType: contentType,
      }).then((req) => {
        const {code, msg, data} = req;
        if (code === 1) {
          app.log("请求：" + reqUrl + " 返回的数据：" + JSON.stringify(data));
        } else {
          app.error("请求：" + reqUrl + " 返回的错误信息：" + msg);
        }
        switch (code) {
          //掉线情况
          case -1:
            app.removeToken();
            app.alert('您已掉线，请重新登录', 'error', 3);
        }
        resolve(req);
      }, ({Status, readyState}) => {
        if (config.debug) {
          app.alert(`请求地址：${url} 请求参数：${JSON.stringify(data)} 请求状态： ${Status}，XMLHttpRequest对象的状态：${readyState}`, "error", 10);
        } else {
          app.alert('网络错误，请检查网络', 'error', 3);
        }
      })
    })
  },
  /**
   * 跳转登录页面
   * @param location
   */
  tokenInvalid(location) {
    app.alert("请重新登录");
    location.push('/');
  },
  /**
   * 在控制台打印信息
   * @param msg
   */
  log: (msg) => {
    if (config.debug) {
      console.log(msg);
    }
  },
  /**
   * 在控制台打印错误信息
   * @param msg
   */
  error(msg){
    if(config.debug){
      console.error(msg);
    }
  },
  alert:function(msg,type="info",times=1.5){
    Message[type](msg,times);
  },
  getRandom:(n)=>{
    let ran=Math.random()*Math.pow(10,n);
    ran+='';
    return ran[0];
  }
};
export default app;
